﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using Entidades.Sistema.Venta;

namespace Entidades.Sistema.Produccion
{
    public class ProduccionProducto
    {

        private int _idProduccionProducto;
        private int _cantidadDemanda;
        private int _cantidadProducida;
        private int _cantidadExedente;
        private List<ProduccionProductoDetalle> CollDetalle;
        private Producto _producto;
        private Receta _receta;

        private List<DetallePedido> CollDetallePedido;

        public ProduccionProducto()
        {
            CollDetalle = new List<ProduccionProductoDetalle>();
        }

        public ProduccionProducto(Producto producto, int cantidad)
        {            
            CollDetalle = new List<ProduccionProductoDetalle>();
            _cantidadDemanda = cantidad;
            _producto = producto;
            _idProduccionProducto = _producto.IdProducto;
            _receta = new Receta();
        }

        public int IdProduccionProducto
        {
            get { return _idProduccionProducto;}
            set { _idProduccionProducto = value; }
        }

        public Producto Producto
        {
            get { return _producto; }
            set { _producto = value; }
        }
        public Receta Receta
        {
            get { return _receta; }
            set { _receta = value; }
        }

        public int CantidadDemanda
        {
            get { return _cantidadDemanda; }
            set { _cantidadDemanda = value; }
        }
        public int CantidadProducida
        {
            get { return _cantidadProducida; }
            set { _cantidadProducida = value; }
        }
        public int CantidadExedente
        {
            get { return _cantidadExedente; }
            set { _cantidadExedente = value; }
        }
        public int Total
        {
            get { return _cantidadDemanda + CantidadExedente; }
        }
        //Esto representa lo que esta asignado a los empleados.
        public int TotalAProducir
        {
            get { return this.Detalle.Sum(x => x.CantidadProducir); }
        }
        public List<ProduccionProductoDetalle> Detalle
        {
            get { return CollDetalle; }
        }

        public void AgregarDetalle(ProduccionProductoDetalle det)
        {
            det.IdProduccionProductoDetalle = det.Empleado.IdEmpleado;
            CollDetalle.Add(det);
        }

        public void EliminarDetalle(ProduccionProductoDetalle det)
        {
            CollDetalle.RemoveAll(x => x.Empleado.IdEmpleado == det.Empleado.IdEmpleado);
        }       

        public ReadOnlyCollection<DetallePedido> DetallePedido
        {
            get { return CollDetallePedido.AsReadOnly(); }
        }

        public void AgregarDetalle(DetallePedido detallepedido)
        {
            CollDetallePedido.Add(detallepedido);
        }

        public void EliminarDetalle(DetallePedido detallepedido)
        {
            //CollDetalle.RemoveAll(x => x.Empleado.IdUsuario == det.Empleado.IdUsuario);
        }

        public enum States
        {
            Creado,
            Iniciada,
            Finalizada
        }
    }
}
